package bz.ziro.kanbe.dao;

import java.util.List;

import org.slim3.datastore.Datastore;

import com.google.appengine.api.datastore.Key;

import bz.ziro.kanbe.bean.Pager;
import bz.ziro.kanbe.meta.SiteListDataMeta;
import bz.ziro.kanbe.model.SiteListData;
import bz.ziro.kanbe.util.KeyFactory;

/**
 * リストデータ取得
 * @author Administrator
 */
public class SiteListDataDao extends BaseDao<SiteListData> {

	/**
	 * メタデータ
	 */
    private static final SiteListDataMeta listDataMeta = new SiteListDataMeta();

    /**
     * 検索
     * @param aListKey
     * @param aKey
     * @return
     */
    public static SiteListData find(Long aListKey, Long aKey) {
        Key key = KeyFactory.createListDataKey(aListKey,aKey);
        return Datastore.query(listDataMeta)
        		.filter(
        			listDataMeta.key.equal(key)
        		).asSingle();
    }

    /**
     * 削除
     * @param aListKey
     * @param aKey
     */
    public static void delete(Long aListKey,Long aKey) {
        //TODO 同一のリストデータがないか検索
        Key key = KeyFactory.createListDataKey(aListKey,aKey);
        Datastore.delete(key);
    }

    /**
     * カウント
     * @param listKey
     * @return
     */
    public static int count(Key listKey) {
        return Datastore.query(listDataMeta)
        		.filter(
        			listDataMeta.listKey.equal(listKey)
        		).count();
    }

    /**
     * ページリストを取得
     * @param listKey
     * @param pager
     * @return
     */
    public static List<SiteListData> findPageList(Long listKey, Pager pager) {
    	return findPageList(listKey,pager.getOffset(),pager.getLimit());
    }

    /**
     * 最新検索
     * @param listKey
     * @param limit
     * @return
     */
    public static List<SiteListData> findLastPageList(Long listKey,int limit) {
    	return findPageList(listKey,0,limit);
    }

    /**
     * リストのページング検索
     * @param listKey
     * @param offset
     * @param limit
     * @return
     */
    public static List<SiteListData> findPageList(Long listKey, int offset,int limit) {
        Key key = KeyFactory.createListKey(listKey);
        return Datastore.query(listDataMeta)
        		.filter(
        			listDataMeta.listKey.equal(key)
        		).sort(listDataMeta.createDate.asc)
        		.offset(offset).limit(limit).asList();
    }
    /**
     * 全件取得
     * @param key
     * @return
     */
    public static List<SiteListData> all(Long key) {
        Key listKey = KeyFactory.createListKey(key);
        return Datastore.query(listDataMeta)
        		.filter(
        			listDataMeta.listKey.equal(listKey)
        		).asList();
    }
}
